package team.bluepen.supermarket.data.dao.abstraction;

import team.bluepen.supermarket.data.entity.HbaseItem;
import team.bluepen.supermarket.data.entity.Qualify;

import java.io.IOException;
import java.util.List;

/**
 * 基本查询接口
 * @param <T> 需要查询的表对应数据实体类
 * @author Kai
 */
public interface QueryOperate<T extends HbaseItem<T>> {
    /**
     * 查询表中所有记录
     * @return 实体类集合
     */
    List<T> query() throws IOException;
    /**
     * 按列查询
     * @param row 列
     * @return 实体类
     */
    T query(String row) throws IOException;

    /**
     * 按列查询
     * @param rows 列
     * @return 实体类集合
     */
    List<T> query(List<String> rows) throws IOException;

    /**
     * 按value值查询（可能存在多条value值相同的数据）
     * @param family 所在列族
     * @param qualifier 限定符
     * @param value 值
     * @return 实体类集合
     */
    List<T> query(String family, String qualifier, byte[] value) throws IOException;

    /**
     * 多条件查询
     * @param qualifies {@link Qualify} 集合
     * @return 实体类集合
     */
    List<T> multiQuery(List<Qualify> qualifies) throws IOException;

    /**
     * 单条件查询
     * @param qualify {@link Qualify} 实体类
     * @return 实体类集合
     */
    List<T> query(Qualify qualify) throws IOException;

}
